from app import db



class UserFactor(db.Model):
    __tablename__ = 'user_factor'

    adjustment_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id = db.Column(db.String(255), db.ForeignKey('user_info.user_id'), nullable=False)
    lifestyle_type = db.Column(db.String(255), nullable=False)
    calories_factor = db.Column(db.Float, nullable=False)
    calories_intake = db.Column(db.Float, nullable=False)
    carb_ratio = db.Column(db.Float)
    prot_ratio = db.Column(db.Float)
    fat_ratio = db.Column(db.Float)
    other_factors = db.Column(db.JSON)
    created_at = db.Column(db.TIMESTAMP, default=db.func.current_timestamp())
    updated_at = db.Column(db.TIMESTAMP, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())

    # user_info = db.relationship('UserInfo', back_populates='user_factors')

    def __repr__(self):
        return f"<UserFactor(user_id={self.user_id}, lifestyle_type={self.lifestyle_type})>"

    @staticmethod
    def create_user_factor(user_id, lifestyle_type, calories_factor, carb_ratio, prot_ratio, fat_ratio, water_intake,
                           calcium_needs, vitamin_d_needs):
        new_factor = UserFactor(
            user_id=user_id,
            lifestyle_type=lifestyle_type,
            calories_factor=calories_factor,
            carb_ratio=carb_ratio,
            prot_ratio=prot_ratio,
            fat_ratio=fat_ratio,
            water_intake=water_intake,
            calcium_needs=calcium_needs,
            vitamin_d_needs=vitamin_d_needs
        )
        db.session.add(new_factor)
        db.session.commit()


    def adjust_for_lifestyle(self, lifestyle_type):
        """
        根据生活方式类型（运动员、孕妇、老年人等）调整 RDI 因子。
        :param lifestyle_type: 生活方式类型，例如 '运动员', '孕妇', '老年人' 等
        :return: 调整后的 RDI 实例
        """
        if lifestyle_type == '运动员':
            # 运动员通常需要更多的碳水化合物和蛋白质
            self.other_factors = 1.6
            self.carb_ratio=40
            self.prot_ratio=40
            self.fat_ratio=20


        elif lifestyle_type == '孕妇':
            self.other_factors = 1.2
            self.carb_ratio = 45
            self.prot_ratio = 35
            self.fat_ratio = 20
            # # 孕妇需要更多的能量和蛋白质
            # if self.nutrient_name == '能量(PAL_I)(MJ/d)':
            #     self.RNI *= 1.2  # 增加20%
            # elif self.nutrient_name == '蛋白质(g/d)':
            #     self.RNI *= 1.1  # 增加10%
            # elif self.nutrient_name == '水(mL/d)_low':
            #     self.AI *= 1.1  # 增加10%

        # elif lifestyle_type == '老年人':
        #     # 老年人通常需要更多的钙、维生素 D
        #     if self.nutrient_name == '钙(mg/d)':
        #         self.RNI += 500  # 增加500mg
        #     elif self.nutrient_name == '维生素D(μg/d)':
        #         self.RNI += 5  # 增加5μg

        # elif lifestyle_type == '糖尿病患者':
        #     # 糖尿病患者可能需要更低的碳水化合物和适当的蛋白质
        #     if self.nutrient_name == '总碳水化合物(%E)':
        #         self.AMDR_min *= 0.8  # 减少20%
        #     elif self.nutrient_name == '蛋白质(g/d)':
        #         self.RNI *= 1.2  # 增加20%

        # elif lifestyle_type == '减肥':
        #     # 减肥用户通常控制碳水化合物，增加蛋白质摄入
        #     if self.nutrient_name == '总碳水化合物(%E)':
        #         self.AMDR_min *= 0.8  # 减少20%
        #     elif self.nutrient_name == '蛋白质(g/d)':
        #         self.RNI *= 1.3  # 增加30%

        return self

    def adjust_for_target(self, target):
        """
        根据健康目标调整 RDI 因子
        :param target: 用户健康目标，例如 '减脂', '增肌', '维持体重', '糖尿病管理'
        :return: 调整后的 RDI 实例
        """
        if target == '减脂':
            self.other_factors = 1.6
            self.carb_ratio = 35
            self.prot_ratio = 45
            self.fat_ratio = 20
            # # 减脂：碳水40-50%，蛋白质30-40%，脂肪20-30%
            # if self.nutrient_name == '总碳水化合物(%E)':
            #     self.AMDR_min = 0.40  # 设置碳水化合物为40%
            # elif self.nutrient_name == '蛋白质(g/d)':
            #     self.RNI = 0.35  # 设置蛋白质为35%
            # elif self.nutrient_name == '总脂肪(%E)':
            #     self.AMDR_min = 0.25  # 设置脂肪为25%

        elif target == '增肌':
            self.other_factors = 1.6
            self.carb_ratio = 35
            self.prot_ratio = 45
            self.fat_ratio = 20
            # 增肌：碳水50-60%，蛋白质25-30%，脂肪15-25%
            # if self.nutrient_name == '总碳水化合物(%E)':
            #     self.AMDR_min = 0.55  # 设置碳水化合物为55%
            # elif self.nutrient_name == '蛋白质(g/d)':
            #     self.RNI = 0.28  # 设置蛋白质为28%
            # elif self.nutrient_name == '总脂肪(%E)':
            #     self.AMDR_min = 0.20  # 设置脂肪为20%

        # elif target == '维持体重':
        #     # 维持体重：碳水45-60%，蛋白质15-25%，脂肪20-35%
        #     if self.nutrient_name == '总碳水化合物(%E)':
        #         self.AMDR_min = 0.50  # 设置碳水化合物为50%
        #     elif self.nutrient_name == '蛋白质(g/d)':
        #         self.RNI = 0.20  # 设置蛋白质为20%
        #     elif self.nutrient_name == '总脂肪(%E)':
        #         self.AMDR_min = 0.30  # 设置脂肪为30%
        #
        # elif target == '糖尿病管理':
        #     # 糖尿病管理：碳水35-45%，蛋白质25-30%，脂肪30-35%
        #     if self.nutrient_name == '总碳水化合物(%E)':
        #         self.AMDR_min = 0.40  # 设置碳水化合物为40%
        #     elif self.nutrient_name == '蛋白质(g/d)':
        #         self.RNI = 0.28  # 设置蛋白质为28%
        #     elif self.nutrient_name == '总脂肪(%E)':
        #         self.AMDR_min = 0.32  # 设置脂肪为32%

        return self